/* Die Klasse Ebooksuchen implementiert alle suchemoeglichkeit , 
 * die man fuer die einer Ebook braucht
 * 
 * 
 * Datei: Ebooksuchen.java       
 * Autor: Gregory Keussi
 * 
 * Datum: 16.11.11                 Version: 0.1 
 * 
 * Historie: 12.11.11 v0.1  
 *                    implementiert  
 * 
 */

package suche;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import medienverwaltung.Ebook;
import medienverwaltung.Medium;
import personenverwaltung.Person;

public class Ebooksuchen implements SuperString<Medium>
{
  private List<Ebook> myEbookList;
  private List<Ebook> Ergebnis = new ArrayList<Ebook> ();


  /*
   * Die Methode ermoeglich die suche eines Ebook nach dem Titel
   */

  public List<Ebook> suchEbookNachTitel (String titel)
  {
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibTitel ().contains (titel)) == true)
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach dem Thema
   */
  public List<Ebook> suchEbookNachThema (String thema)
  {
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibTitel ().contains (thema)) == true)
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach der Stichwoerte
   * und liefert eine Liste von entsprechende Ebooken zurueck,die Suche
   * Krietere entsprechen
   */

  public List<Ebook> suchEbookNachStichworte (String stich)
  {
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibTitel ().contains (stich)) == true)
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach der Fachgebiet
   * und liefert eine Liste von entsprechende Ebooken zurueck,die Suche
   * Krietere entsprechen
   */

  public List<Ebook> suchEbookNachFachgebiet (String fach)
  {
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibTitel ().contains (fach)) == true)
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach der Initial und
   * liefert eine Liste von entsprechende Ebooken zurueck,die Suche
   * Krietere entsprechen
   */

  public List<Ebook> suchEbookNachInitial (String initial)
  {
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibTitel ().contains (initial)) == true)
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach der Sachgebiet
   * und liefert eine Liste von entsprechende Ebooken zurueck,die Suche
   * Krietere entsprechen
   */

  public List<Ebook> suchEbookNachSachgebiet (String sach)
  {
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibTitel ().contains (sach)) == true)
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach dem Datum und
   * liefert eine Liste von entsprechende Ebooken zurueck,die Suche
   * Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum groesser als die Erscheinungsjahr den Ebooken
   * ist
   */

  public List<Ebook> suchEbookNachErschjahrKlein (String date)
  {
    int iDate = Integer.parseInt (date);
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibErscheinungsdatum ().gibJahr () < iDate))
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  public List<Ebook> suchEbookNachSchlagworte (String schlag)
  {
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibStichworte ().contains (schlag)) == true)
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach dem Datum und
   * liefert eine Liste von entsprechende Ebooken zurueck,die Suche
   * Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum kleiner als die Erscheinungsjahr den Ebooken ist
   */

  public List<Ebook> suchEbookNachErschjahrGross (String date)
  {

    int iDate = Integer.parseInt (date);
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibErscheinungsdatum ().gibJahr () > iDate))
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode ermoeglich die suche eines Ebook nach dem Datum und
   * liefert eine Liste von entsprechende Ebooken zurueck,die Suche
   * Krietere entsprechen Die Methode soll auch pruefen, ob das
   * eingegebenen Datum gleich als die Erscheinungsjahr den Ebooken ist
   */

  public List<Ebook> suchEbookNachErschjahrGleich (String date)
  {

    int iDate = Integer.parseInt (date);
    for (Ebook Ebook : myEbookList)
    {
      if ( (Ebook.gibErscheinungsdatum ().gibJahr () == iDate))
      {
        Ergebnis.add (Ebook);
      }
    }

    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methoe ermoeglicht die Recherche von einer Ebook nach seinem
   * Autor. Und liefert eine Liste von Ebooken,die den Autor geschrieben
   * hat.
   */

  public List<Ebook> suchEbookNachAutor (String autor)
  {
    for (Ebook Ebook : myEbookList)
    {

      for (Person aut : Ebook.gibAutoren ())
      {
        if ( (aut.gibNachname ().contains (autor)) == true)
        {
          Ergebnis.add (Ebook);
        }
      }
    }
    Collections.sort (Ergebnis, new CompareMedium ());
    return Ergebnis;
  }


  /*
   * Die Methode liefert eine Liste von allen Ebook, die in der
   * Medienliste sind
   */
  public List<Ebook> gibMyEbookList ()
  {
    return myEbookList;
  }


  /*
   * Die Methode ermoeglicht,dass man eine neue Liste von von Ebook gibt
   */

  public void setzeMyEbookList (List<Ebook> myEbookList)
  {
    this.myEbookList = myEbookList;
  }


  /*
   * Die methode liefert eine Liste zurueck. Durch diese Methode kann
   * man eine Liste von seiner gesuchten krietere bekommen
   */

  public List<Ebook> gibErgebnis ()
  {
    return Ergebnis;
  }


  /*
   * Die Methode implementiert die Verwaltung von der Suche einer Ebook.
   * und sie liefert nichts zurueck
   */

  public void EbookSuchVerwalter (int i, String s)
  {
    switch (i)
    {
    /*
     * Die case 0 ist die zuweisung der werte null an die Liste Ergebnis
     * ,
     */

    case 0:
      Ergebnis = null;
      break;

    /*
     * Die case 1 Die die zuweisung von der Werte null an die Liste
     * Ergebnis..
     */

    case 1:
      Ergebnis = null;
      ;
      break;

    /*
     * Die case 2 ist Aufruf der Methode ,die nach Erscheinungsdatum
     * gleich als das eingegeben Datum sucht
     */

    case 2:
      suchEbookNachErschjahrGleich (s);
      break;

    /*
     * Die case 3 ist Aufruf der Methode , die nach Erscheinungsdatum
     * Grosser als das eingegeben Datum sucht
     */

    case 3:
      suchEbookNachErschjahrGross (s);
      break;

    /*
     * Die case 4 ist Aufruf der Methode , die nach Erscheinungsdatum
     * kleiner als das eingegeben Datum sucht
     */

    case 4:
      suchEbookNachErschjahrKlein (s);
      break;

    /*
     * Die case 5 ist Aufruf der Methode , die nach Fachgebiet sucht
     */

    case 5:
      suchEbookNachFachgebiet (s);
      break;

    /*
     * Die case 6 ist Aufruf der Methode , die nach Initial sucht
     */

    case 6:
      suchEbookNachInitial (s);
      break;

    /*
     * Die case 7 ist Aufruf der Methode , die nach Sachgebiet sucht
     */

    case 7:
      suchEbookNachSachgebiet (s);
      break;

    /*
     * Die case 8 ist Aufruf der Methode , die nach Schlagworte sucht
     */

    case 8:
      suchEbookNachSchlagworte (s);
      break;

    /*
     * Die case 9 die zuweisung von der Werte null an die Liste
     * Ergebnis.
     */
    case 9:
      Ergebnis = null;
      break;

    /*
     * Die case 10 ist Aufruf der Methode , die nach Stichworte sucht
     */

    case 10:
      suchEbookNachStichworte (s);
      break;

    /*
     * Die case 11 ist Aufruf der Methode ,die nach Thema sucht
     */

    case 11:
      suchEbookNachThema (s);
      break;

    /*
     * Die case 12 ist Aufruf der Methode ,die nach Titel sucht
     */

    case 12:
      suchEbookNachTitel (s);
      break;

    default:
      break;

    }

  }


  /*
   * Die Methode liert ale basis informationen ueber ein Medium in einem
   * String .Die Methode nimmt ein Objekt Medium als parameter und gibt
   * ein String zurueck.
   */

  public String superString (Medium t)
  {
    String s = "\n ";
    s += "\nFach: ";
    s += t.gibFachgebiet ();
    s += " Sach: ";
    s += t.gibSachgebiet ();
    s += " \nThema: ";
    s += t.gibThema ();
    s += " Titel ";
    s += t.gibTitel ();
    s += " \nStichW: ";
    s += t.gibStichworteString ();
    s += " Erschnungsjahr: ";
    s += t.gibErscheinungsdatumString ();
    s += "\n Verlag: ";
    s += t.gibVerlag ().gibName ();

    return s;
  }


  /*
   * Die Methode ErgebnisToString wandelt eine Liste von gefundenen
   * Ebook in String um. und die Methode wird spaeter fuer die Gui
   * verwendet. Die Methode nimmt eine Liste von Objekten Ebook .Und sie
   * gibt ein String zurueck.
   */
  public String ErgebnisToString (List<Ebook> EbookL)
  {
    String a = " ";

    for (Ebook Ebook : EbookL)
    {
      a = "Ebook:\n ";
      a += Ebook.gibAutorenListeString ();
      a += superString (Ebook);
    }
    return a;
  }

}
